首页 > 试题广场 >

求解立方根

[编程题]求解立方根
  • 热度指数:309824 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
计算一个浮点数的立方根,不使用库函数。
保留一位小数。

数据范围:


输入描述:

待求解参数,为double类型(一个实数)



输出描述:

输出参数的立方根。保留一位小数。

示例1

输入

19.9

输出

2.7
示例2

输入

2.7

输出

1.4
a= float(input())
if a>0:
    b = a**(1/3)

else:
    b = (-a)**(1/3)*(-1)

print("%.1f"%b)  
发表于 2023-06-13 20:46:33 回复(0)
import sys
a = 1/3
for n in sys.stdin:
    n = float(n)
    if n > 0:
        print('%.1f'%(n**a))
    elif n == 0:
        print(0)
    else:
        n = -n
        print("-"+'%.1f'%(n**a))
发表于 2022-09-04 16:29:16 回复(0)
while True: try:
        a = float(input()) if a > 0:
            n = a ** (1 / 3)
            x = '{:.1f}'.format(n) print(x) elif a < 0:
            n = (-a) ** (1 / 3)
            x='{:.1f}'.format(n) print(-float(x)) except: break
发表于 2022-08-31 22:19:23 回复(0)
a = float(input())
positive = a >= 0
a *= (positive*2-1)
b = a**(1/3)
print(round((positive*2-1)*b, 1))

发表于 2022-08-28 00:05:08 回复(0)
while True:
    try:
        a = float(input())
        if a >= 0:
            print(round(a**(1/3),1))
        else:
            a = a*-1
            print('-',end='')
            print(round(a**(1/3),1))
    except:
        break

发表于 2022-08-21 14:32:24 回复(0)
n = float(input())
if n == 0:
    print('0.0')
elif n>0:
    ans = str(n**(1/3)).split('.')
    if int(ans[1][1])<5:
        print(f'{ans[0]}.{ans[1][0]}')
    else:
        print(f'{ans[0]}.{int(ans[1][0])+1}')
else:
    n *= -1
    ans = str(n**(1/3)).split('.')
    if int(ans[1][1])<5:
        print(f'-{ans[0]}.{ans[1][0]}')
    else:
        print(f'-{ans[0]}.{int(ans[1][0])+1}')

发表于 2022-08-19 15:29:14 回复(0)
两行代码就能搞定了:
n= float(input())
print(round(n**(1/3), 1)) if n>=0 else print("-"+str(round(abs(n)**(1/3), 1)))


发表于 2022-08-09 20:42:56 回复(0)
while True:
    try:
        a=float(input())
        #泰勒公式 x(n+1)=x(n)-△x=x(n)-f(x(n))/f'(x(n))
        t=a 
        while abs(t**3-a)>0.00001:
            t=((a-t**3)/(3.0*t**2))+t 
        print(round(t,1))
        #二分法 
        m,n=-20,20
        mid=(m+n)/2
        while abs(mid**3-a)>0.0001:
            if mid**3<a:
                m=mid
            else:
                n=mid
            mid=(m+n)/2
        #print(round(mid,1))
        
    except:
               break        

发表于 2022-07-31 23:13:38 回复(0)
二分法:
def func(n):
    if n == 0:
        return 0
    if abs(n) == 1 :
        return n
    if n>0:
        left = 0
        right = n if n > 1 else 1
    else:
        left = n if n < -1 else -1
        right = 0
    while True:
        mid  = (left + right) / 2
        t = mid * mid * mid
        if abs(t-n)<0.01:
            return round(mid*10)/10
        elif t > n:
            right = mid
        elif t < n:
            left = mid

x = float(input())
print("%.1f" % (func(x)))


发表于 2022-07-23 20:34:12 回复(0)
while True:
    try:
        a =  input()
        if a[0]=='-':
            a = a[1::]
            b = float(a)**(1/3)
            print('-'+'%.1f'%b)
        else:
            b = float(a)**(1/3)
            print('%.1f'%b)
    except:
        break
      
发表于 2022-06-13 20:37:09 回复(0)
while True:
    try:
        n=float(input())
        if n>=0:
            x=n**(1/3)
            print(round(x,1))
        else:
            x=-abs(n)**(1/3)
            print(round(x, 1))
    except:
        break
搞定了,哈哈
发表于 2022-06-11 21:48:44 回复(0)
num=int(float(input())*1000)
cc=0
if num<0:
    cc=1
    num=num*-1
c=[]
c1=[]
b=[]
b1=[]
for i in range (0,30):
    a=num-i*i*i
    if a>=0:
        c.append(a)
        c1.append(i)
    else:
        b.append(a)
        b1.append(i)
if cc==0:
    if c[len(c)-1]>b[0]*-1:
        print(len(c)/10)
    else:
        print((len(c)-1)/10)
else:
    if c[len(c)-1]>b[0]*-1:
        print(-len(c)/10)
    else:
        print(-(len(c)-1)/10)
发表于 2022-06-08 13:47:30 回复(0)
只能通过8条用例,到0.3过不了,累了,看哪个大神能解决一下不
def digui(a,b): # 递归
    # print(a)
    if a == round(b**3,1):
        return round(b,1)
    else:
        # print(round(b**3,1))
        return digui(a,round(b+0.001,3))
s = float(input())
s1 = abs(s)
k =[]
i = 0
while i <= 3:  
    k.append(round(i, 1))
    i += 0.1
m = 0
for j in k:
    if round(j ** 3,1) > s1 and round((j-0.1) ** 3,1)<s1:
        m = round(j-0.1,2)
        break
num = digui(s1,m)
if s < 0:
    m = -num
    print(m)
else:
    print(num)

发表于 2022-05-13 00:38:33 回复(0)
while True:
    try:
        a = float(input().strip())
        epsilon = 0.0001
        low = min(-1.0, a) #左边界
        high = max(1.0, a) #右边界
        ans = (low + high)/2 
        
        while abs(ans**3 - a) >= epsilon:
            if ans**3 < a:# ans小了
                low = ans #要变大,所以移动左边界,使下一次ans变大
            else: # ans大了
                high = ans #要变小。所以移动右边界,使下一次ans变小
            ans = (low + high)/2.0
            
        print(round(ans,1)) #输出参数的立方根。保留一位小数
    except:
        break

发表于 2022-05-09 02:33:49 回复(0)
n = float(input())
i = float(0)
while abs(i * i * i) < abs(n):
    i += 0.01
else:
    if n >= 0:
        print("%.1f" % i)
    else:
        print("-" + "%.1f" % i)
发表于 2022-04-15 08:03:04 回复(0)

问题信息

难度:
54条回答 57966浏览

热门推荐

通过挑战的用户

查看代码